#ifdef UNICODE
#define __FUNCTIONT__ __FUNCTIONW__
#else
//__FUNCTIONW__;
#endif

template<int num, typename T = float>
struct VectorTmp{ T v[num]; };

template<typename T>
struct VectorTmp<2>
{
	union
	{
		struct{ T _x, _y; };
		float v[2];
	};

	//#include <xmmintrin.h>

	VectorTmp():_x(0), _y(0){}
	VectorTmp(float x, float y){ _x = x; _y = y; }
	VectorTmp(const VectorTmp<2>& vec){ this = vec;}
};

template<>
struct VectorTmp<3>
{
	union
	{
		float v[3];
		struct{ float _x, _y, _z; };
	};

	VectorTmp(){ZeroMemory(v, sizeof(v));}
	VectorTmp(float x, float y, float z){ _x = x; _y = y; _z = z; }
	VectorTmp(const VectorTmp<3>& vec){ CopyMemory(v, vec.v, sizeof(vec.v)); }
};

template<>
struct VectorTmp<4>
{
	union
	{
		float data[4];
		struct{ float x, y, z, w; };
		struct{ float r, g, b, a; };
		__m128 f;
	};

	//__m128 Vector<4> operator * (const Vector<4>& v)const
	//{
		//__m128 a; a = _mm_mul_ps()
	//}


};

typedef VectorTmp<2> Vector2Float;
typedef VectorTmp<3> Vector3Float;
typedef VectorTmp<4> Vector4Float;